home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGSCAL
/
TBUTIL2.LZH
/
HEAPTEST.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-08-21
|
2KB
|
61 lines
program HeapTest (input, output) ;
{ This program demonstrates a bug in Turbo's version 2. Put
10 integers on the stack, then release the stack and put
10 integers on the stact again. In version 1.0, you will
get the same results - as it should be. In version 2.0,
you will get different answers. Apparently, the procedure
Release(HeapTop) in not working properly. The procedure
ReleaseHeap is a replacement for Release (HeapTop) and seems
to work correctly. }
type
IntegerPointer = ^integer ;
var
Number : ^integer ;
HeapTop : ^integer ;
Mem : real ;
Procedure ReleaseHeap (AHeapPointer : IntegerPointer) ;
var
i : integer ;
begin
i := ((seg(heapptr^) - seg(AHeapPointer^)) shl 4) +
(ofs(heapptr^) - ofs(AHeapPointer^)) ;
FreeMem(AHeapPointer, i) ;
end ;
procedure report ; { report memory available }
begin
Mem := memAvail ;
if (Mem < 0) then Mem := 65536.0 + MemAvail ;
write ('MemAvail = ', Mem :7:0, ' paragraphs ', Mem * 16.0 :9:0, ' bytes') ;
end ;
procedure FillTheHeap(xc,yc, Depth : integer) ; { fill the heap to depth }
var
n : integer ;
begin
for n := 1 to Depth do
begin
New(Number) ;
Number^ := n ;
gotoxy(xc,yc) ;
report ;
end ;
end ;
begin { main }
Mark(HeapTop) ; { mark the top of the heap }
gotoxy(5,20) ;
report ; { 1: report memory available }
FillTheHeap(5,21,10) ; { 2: fill the heap with 10 integers }
ReleaseHeap(HeapTop) ; { release the heap using the fix }
{ release (HeapTop) ; This does not work! }
gotoxy(5,22) ;
report ; { 3: report memory available; should be same as 1 }
FillTheHeap(5,23,10) ; { 4: put 10 integers on again; should be same as 2 }
end.